﻿using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using CommunityToolkit.Mvvm.ComponentModel;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Navigation;
using Wino.Core.Domain.Models.Translations;

namespace Wino.Mail.ViewModels
{
    public partial class LanguageTimePageViewModel(IDialogService dialogService,
                                    IPreferencesService preferencesService,
                                    ITranslationService translationService) : BaseViewModel(dialogService)
    {
        public IPreferencesService PreferencesService { get; } = preferencesService;
        private readonly ITranslationService _translationService = translationService;

        [ObservableProperty]
        private List<AppLanguageModel> _availableLanguages;

        [ObservableProperty]
        private AppLanguageModel _selectedLanguage;

        private bool isInitialized = false;

        public override void OnNavigatedTo(NavigationMode mode, object parameters)
        {
            base.OnNavigatedTo(mode, parameters);

            AvailableLanguages = _translationService.GetAvailableLanguages();

            SelectedLanguage = AvailableLanguages.FirstOrDefault(a => a.Language == PreferencesService.CurrentLanguage);

            isInitialized = true;
        }

        protected override async void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            base.OnPropertyChanged(e);

            if (!isInitialized) return;

            if (e.PropertyName == nameof(SelectedLanguage))
            {
                await _translationService.InitializeLanguageAsync(SelectedLanguage.Language);
            }
        }
    }
}
